﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using SouthApps.MobileHealth.SDK.DAL.Model;
using SouthApps.MobileHealth.SDK.Cache;

namespace SouthApps.MobileHealth.SDK.DAL.DataAccess
{
    public class CentroAtencionDao : DataAccessObject
    {
        #region Get

        public CentroAtencion GetCentroAtencion(int centroatencionId)
        {
            try
            {
                using (var entities = this.EntityContext)
                {
                    return entities.centroatencion.FirstOrDefault(e =>
                        e.centroAtencionId == centroatencionId);
                }
            }
            catch (Exception ex)
            {
                throw this.HandleException(ex);
            }
        }

        public List<CentroAtencion> GetCentrosAtencionFinanciador(int financiadorId)
        {
            return this.GetCentrosAtencionFinanciador(financiadorId, true);
        }

        public List<CentroAtencion> GetCentrosAtencionFinanciador(int financiadorId, bool activo)
        {
            try
            {
                using (var entities = this.EntityContext)
                {
                    var query = from e in entities.centroatencion.Include("Departamento.Provincia.Pais")
                                where (e.financiadorId == financiadorId && e.activo == activo)
                                select e;

                    return query.ToList();
                }
            }
            catch (Exception ex)
            {
                throw this.HandleException(ex);
            }
        }

        #endregion

        #region Add

        public void AddCentroAtencion(CentroAtencion centroatencion)
        {
            try
            {
                using (var entities = this.EntityContext)
                {
                    entities.AddTocentroatencion(centroatencion);
                    this.SaveChanges(entities);
                    CentrosAtencionCache.AddCentroAtencionToCache(centroatencion.financiadorId, centroatencion);
                }
            }
            catch (Exception ex)
            {
                throw this.HandleException(ex);
            }
        }

        #endregion

        #region Modify

        public void ModifyCentroAtencion(CentroAtencion centroAtencion)
        {
            try
            {
                using (var entities = this.EntityContext)
                {
                    CentroAtencion oldCentroAtencion = entities.centroatencion.FirstOrDefault(e => e.centroAtencionId == centroAtencion.centroAtencionId);
                    oldCentroAtencion = centroAtencion;
                    this.SaveChanges(entities);
                    CentrosAtencionCache.UpdateCentroAtencionToCache(centroAtencion.financiadorId, centroAtencion);
                }
            }
            catch (Exception ex)
            {
                throw this.HandleException(ex);
            }
        }

        #endregion
    }
}
